# -*-coding:utf-8-*-
import pandas as pd

pd.set_option('display.unicode.east_asian_width', True)
df: pd.DataFrame = pd.read_excel(r'..\book.xlsx', usecols=[0, 2])

# 1.增加列
df['直接增加列'] = 0  # 直接增加列
df.loc[:, 'loc增加列'] = 1  # loc增加列（不能使用iloc）
df.insert(1, '插入列', 2)  # 指定位置插入列，在第i列后面插入（index算第0列）

# 2.增加行
df.loc[df.shape[0]] = ['B28', 2, 'book', 0, 1]  # loc增加行（不能使用iloc）
df_add = pd.DataFrame({'序号': ['B29', 'B30'], '插入列': 2, '书名': ['book1', 'book2'], '直接增加列': 0, 'loc增加列': 1})
df_new = df.append(df_add, ignore_index=True)  # append增加行，返回新的dataframe

# 3.修改数据
df.loc[27] = ['B28', 2, 'book2', 0, 1]
df.loc[:, '插入列'] = 3
df.loc[27, '插入列'] = 4
df.loc[df['序号'] == 'B01']['书名'] = 'qwer'  # 链式赋值不会改变原df中的数据，因为第一个[]返回的是副本而不是视图
df.loc[df['序号'] == 'B01', '书名'] = 'qwer'  # 使用loc将两次链式操作组合成一步操作，才会修改原df

# 4.删除数据，drop(self,labels,axis=0,index,columns,,inplace=False)，inplace为False时返回新的dataframe
df.drop('插入列', axis=1)  # 删除列，传入列表可以删除多列
df.drop(columns=['插入列', '序号'])  # 通过columns参数删除列
df.drop([26, 27], axis=0)  # 删除行
df.drop(index=27)  # 通过index参数删除行
df.drop(index=df[df['序号'] != 'B12'].index)  # 删除序号不为B12的行
